package com.fc.services.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.fc.dao.UserDao;
import com.fc.entities.User;
import com.fc.helpers.StringHelper;
import com.fc.services.RegistrationException;
import com.fc.services.RegistrationService;

/**
 * 
 * @author Ács Ádám
 *
 */
@Transactional
@Service("registrationService")
public class RegistrationServiceImpl implements RegistrationService {
	@Autowired
	private UserDao userDao;
	
	public RegistrationServiceImpl() {
		super();
	}

	/**
	 * Regisztrálja a felhasználót ha még nem volt ilyen felhasználónév.
	 * @return a regisztráció sikeressége
	 * @throws RegistrationException 
	 */
	@Override
	public void register(User user) throws RegistrationException {
		if (!isPossibleUserId(user.getUserName())) {
			throw new RegistrationException();
		}
		if (userDao.findByUserName(user.getUserName()) != null) {
			throw new RegistrationException();
		}
		
		if (!isPossiblePassword(user.getPassword())) {
			throw new RegistrationException();
		}
		
		userDao.save(user);
	}
	
	private boolean isPossiblePassword(String password) {
		if (StringHelper.isBlank(password)) {
			return false;
		}
		
		if (password.length() <= 3) {
			return false;
		}
		
		return true;
	}

	private boolean isPossibleUserId(String userId) {
		if (StringHelper.isBlank(userId)) {
			return false;
		}
		
		/* TODO property fájlból kivenni a nem lehetséges stringeket */
		List<String> possibleUserIds = new ArrayList<String>();
		for (String str : possibleUserIds) {
			if (userId.equals(str)) {
				return false;
			}
		}
		
		return true;
	}
}
